package demo.api;

import org.pcap4j.core.PacketListener;

/**
 * 协议服务
 * 
 * @author caohj
 * @Date 2017年8月3日
 */
public interface ProtocolService extends PacketListener {

	/**
	 * 将当前协议从协议栈注销
	 */
	void unbind();

	/**
	 * 当前协议是否绑定在协议栈上
	 * 
	 * @return
	 */
	boolean isBound();

	/**
	 * 安装新的协议处理器 假如已安装相同类型的协议处理器，那么替换并返回旧的处理器
	 * 
	 * @param type
	 * @param highLevelProtocolService
	 * @return
	 * 
	 */
	ProtocolService installHighLevelProtocal(Number type, ProtocolService highLevelProtocolService);

	/**
	 * 卸载旧的协议处理器，如果成功卸载，那么返回旧的处理器
	 * 
	 * @param type
	 */
	ProtocolService uninstallHighLevelProtocal(Number type);

	ProtocolService getHighLevelProtocal(Number type);

	/**
	 * 获取底层协议
	 * 
	 * @return 对于以太网协议返回null
	 */
	<T extends ProtocolService> T getBaseProtocal();

	/**
	 * 打开/关闭包记录开关
	 * 
	 * @param logPacket
	 */
	void setLogPacketOption(boolean logPacket);

	/**
	 * 是否需要记录捕获的包，如果底层协议已经记录，这儿就不再记录了
	 * 
	 * @return
	 */
	boolean needLogPacket();
}
